﻿using BookStore.Solution.Entities;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BookStore.Solution.BLL
{
    public class PositionManager
    {
        /*
         * Insert position to database
         */
        public string Insert(Position t)
        {
            Position position = null;
            using (BookStoreEntities ctx = new BookStoreEntities())
            {
                try
                {
                    position = ctx.Positions.Where(a => a.PositionID == t.PositionID).FirstOrDefault<Position>();
                    if (position == null)
                    {
                        ctx.Positions.Add(t);
                        if (ctx.SaveChanges() > 0)
                        {
                            SystemLogManager.Insert("Thêm chức vụ: "+ t);
                            return "Thêm thành công";
                        }
                        else
                            return "Thêm thất bại";
                    }
                    else
                        return "Trùng khóa chính";
                }
                catch (Exception e)
                {
                    return e.Message;
                }
            }
        }

        /**
         * Update position
         */
        public string Update(Position t)
        {
            Position position = null;
            using (BookStoreEntities ctx = new BookStoreEntities())
            {
                try
                {
                    position = ctx.Positions.Where(a => a.PositionID == t.PositionID).FirstOrDefault<Position>();
                    if (position != null)
                    {
                        position.PositionName = t.PositionName;
                        ctx.Entry(position).State = System.Data.Entity.EntityState.Modified;
                        if (ctx.SaveChanges() > 0)
                        {
                            t = position;
                            SystemLogManager.Insert("Cập nhật chức vụ: " + position);
                            return "Cập nhật thành công";
                        }
                        else
                            return "Cập nhật thất bại";
                    }
                    else
                        return "Mã chức vụ không tồn tại";
                }
                catch (Exception e)
                {
                    return e.Message;
                }
            }
        }

        /*
         * Delete position
         */
        public string Delete(Position t)
        {
            Position position = null;
            using (BookStoreEntities ctx = new BookStoreEntities())
            {
                try
                {
                    Employee employees = ctx.Employees.Where(e => e.PositionID == t.PositionID).FirstOrDefault<Employee>();
                    if (employees == null)
                    {
                        position = ctx.Positions.Where(a => a.PositionID == t.PositionID).FirstOrDefault<Position>();
                        if (position != null)
                        {
                            ctx.Entry(position).State = System.Data.Entity.EntityState.Deleted;
                            if (ctx.SaveChanges() > 0)
                            {
                                t = position;
                                SystemLogManager.Insert("Xóa chức vụ: " + position);
                                return "Xóa thành công";
                            }
                            else
                                return "Xóa thất bại";
                        }
                        else
                            return "Mã chức vụ không tồn tại";
                    }
                    else
                        return "Tồn tại nhân viên sử dụng chức vụ này";
                }
                catch (Exception e)
                {
                    return e.Message;
                }
            }
        }

        /*
         * Tìm kiếm theo tên chức vụ
         */
        public DataTable SearchbyName(string name)
        {
            using (BookStoreEntities ctx = new BookStoreEntities())
            {
                DataTable dt = CreateTable();
                var PositionList = (from a in ctx.Positions where a.PositionName.Contains(name) select a).ToList<Position>();
                foreach (var row in PositionList)
                {
                    dt.LoadDataRow(new object[] { row.PositionID, row.PositionName }, false);
                }
                return dt;
            }
        }

        /*
         * Tìm kiếm theo mã chức vụ
         */
        public DataTable SearchByID(int id)
        {
            using (BookStoreEntities ctx = new BookStoreEntities())
            {
                DataTable dt = CreateTable();
                var PositionList = (from a in ctx.Positions where a.PositionID == id select a).ToList<Position>();
                foreach (var row in PositionList)
                {
                    dt.LoadDataRow(new object[] { row.PositionID, row.PositionName }, false);
                }
                return dt;
            }
        }

        private DataTable CreateTable()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("PositionID", typeof(int));
            dt.Columns.Add("PositionName", typeof(string));
            return dt;
        }

        /*
         * Get datatable of account
         */
        public DataTable GetAll()
        {
            using (BookStoreEntities ctx = new BookStoreEntities())
            {
                DataTable dt = CreateTable();
                var PositionList = (from a in ctx.Positions select a).ToList<Position>();
                foreach (var row in PositionList)
                {
                    dt.LoadDataRow(new object[] { row.PositionID, row.PositionName }, false);
                }
                return dt;
            }
        }
    }
}
